﻿using Maticsoft.BLL;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace UI.Forms
{
    public partial class UserList : Form
    {
        Maticsoft.BLL.Users bll = new Maticsoft.BLL.Users();

        // 分页参数
        private int pageSize = 10;  // 每页记录数
        private int pageIndex = 1;  // 当前页码（从1开始）
        private int totalCount = 0; // 总记录数（需从数据库获取）

        public UserList()
        {
            InitializeComponent();
            // 初始化分页下拉框（如添加10,20,50等选项）
            if (uiComboBox1.Items.Count == 0)
            {
                uiComboBox1.Items.AddRange(new object[] { "10", "20", "50", "100" });
                uiComboBox1.SelectedIndex = 0; // 默认选中10条/页
            }
        }

        private void UserList_Load(object sender, EventArgs e)
        {
            LoadData();
        }

        /// <summary>
        /// 加载数据（核心分页逻辑）
        /// </summary>
        private void LoadData()
        {
            try
            {
                // 1. 构建查询条件（可根据界面控件动态生成）
                string strWhere = BuildWhereCondition();

                // 2. 构建排序条件（必须指定，避免分页数据混乱）
                string orderby = "CreateAt DESC, Id ASC"; // 默认按创建时间倒序

                // 3. 计算分页范围（关键修复：每次加载时重新计算）
                int startIndex = (pageIndex - 1) * pageSize + 1;
                int endIndex = pageIndex * pageSize;

                // 4. 获取总记录数（用于判断分页边界）
                totalCount = bll.GetRecordCount(strWhere); // 需BLL层提供该方法

                // 5. 获取当前页数据
                DataSet ds = bll.GetListByPage(strWhere, "", startIndex, endIndex);
                uiDataGridView1.DataSource = ds.Tables[0];

                // 6. 更新分页信息显示（如"第1页/共3页 共25条"）
                UpdatePageInfo();

                // 7. 禁用/启用分页按钮（避免无效点击）
                UpdatePageButtonsStatus();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"加载数据失败：{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// 构建查询条件（根据界面控件）
        /// </summary>
        private string BuildWhereCondition()
        {
            List<string> conditions = new List<string>();

            // 示例1：处理日期选择器（假设是查询创建时间）
            // 定义默认日期（1900-01-01 00:00:00）
            DateTime defaultDate = new DateTime(1900, 1, 1, 0, 0, 0);

            // 检查两个日期控件都不是默认值时，添加范围查询条件
            if (uiDatetimePicker1.Value != defaultDate && uiDatetimePicker2.Value != defaultDate)
            {
                // 起始日期（取当天0点）
                DateTime startDate = uiDatetimePicker1.Value.Date;
                // 结束日期（取当天23:59:59.999）
                DateTime endDate = uiDatetimePicker2.Value.Date.AddDays(1).AddTicks(-1);

                // 添加范围查询条件（CreateAt在startDate和endDate之间）
                conditions.Add($"CreateAt >= '{startDate:yyyy-MM-dd HH:mm:ss}' AND CreateAt <= '{endDate:yyyy-MM-dd HH:mm:ss}'");
            }

            // 示例2：可添加其他条件（如用户名搜索框）
            if (!string.IsNullOrEmpty(uiTextBox1.Text))
            {
                conditions.Add($"Account LIKE '%{uiTextBox1.Text}%'");
            }

            // 拼接条件（无条件时返回空字符串）
            return conditions.Count > 0 ? string.Join(" AND ", conditions) : "";
        }

        /// <summary>
        /// 更新分页信息显示
        /// </summary>
        private void UpdatePageInfo()
        {
            int totalPage = (totalCount + pageSize - 1) / pageSize; // 计算总页数
            uiLabel4.Text = $"第 {pageIndex} 页 / 共 {totalPage} 页  总记录数：{totalCount}";
        }

        /// <summary>
        /// 更新分页按钮状态（禁用/启用）
        /// </summary>
        private void UpdatePageButtonsStatus()
        {
            int totalPage = (totalCount + pageSize - 1) / pageSize;

            // 首页/上一页：第一页时禁用
            uiButton1.Enabled = pageIndex > 1;
            uiButton2.Enabled = pageIndex > 1;

            // 下一页/末页：最后一页时禁用
            uiButton3.Enabled = pageIndex < totalPage;
            uiButton4.Enabled = pageIndex < totalPage;
        }

        // 日期选择器变化时重新加载数据
        private void uiDatetimePicker1_ValueChanged(object sender, DateTime value)
        {
            pageIndex = 1; // 条件变化时重置到第一页
            LoadData();
        }

        // 查询按钮（重新加载数据）
        private void uiSymbolButton1_Click(object sender, EventArgs e)
        {
            pageIndex = 1; // 查询时重置到第一页
            LoadData();
        }

        // 首页
        private void uiButton1_Click(object sender, EventArgs e)
        {
            if (pageIndex != 1)
            {
                pageIndex = 1;
                LoadData();
            }
        }

        // 每页条数变化
        private void uiComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (int.TryParse(uiComboBox1.SelectedItem?.ToString(), out int newSize) && newSize > 0)
            {
                pageSize = newSize;
                pageIndex = 1; // 每页条数变化时重置到第一页
                LoadData();
            }
        }

        // 页码跳转
        private void uiButton5_Click(object sender, EventArgs e)
        {
            if (int.TryParse(uiTextBox2.Text, out int targetPage) && targetPage > 0)
            {
                int totalPage = (totalCount + pageSize - 1) / pageSize;
                // 限制跳转页码在有效范围内
                pageIndex = Math.Min(Math.Max(targetPage, 1), totalPage);
                LoadData();
            }
            else
            {
                MessageBox.Show("请输入有效的页码！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                uiTextBox2.Focus();
            }
        }

        // 上一页
        private void uiButton2_Click(object sender, EventArgs e)
        {
            if (pageIndex > 1)
            {
                pageIndex--;
                LoadData();
            }
        }

        // 下一页
        private void uiButton3_Click(object sender, EventArgs e)
        {
            int totalPage = (totalCount + pageSize - 1) / pageSize;
            if (pageIndex < totalPage)
            {
                pageIndex++;
                LoadData();
            }
        }

        // 末页
        private void uiButton4_Click(object sender, EventArgs e)
        {
            int totalPage = (totalCount + pageSize - 1) / pageSize;
            if (pageIndex != totalPage)
            {
                pageIndex = totalPage;
                LoadData();
            }
        }

        private void uiHeaderButton1_Click(object sender, EventArgs e)
        {
            LoadData();
        }

        private void uiSymbolButton2_Click(object sender, EventArgs e)
        {
            int id = int.Parse(uiDataGridView1.SelectedRows[0].Cells["UserId"].Value.ToString());
            Maticsoft.Model.Users model = bll.GetModel(id);
            UserAdd userAddForm = new UserAdd(false,model);
            if (userAddForm.ShowDialog() == DialogResult.OK)
            {
                LoadData(); // 添加成功后刷新列表
            }
        }

        private void uiSymbolButton3_Click(object sender, EventArgs e)
        {
            int id = int.Parse(uiDataGridView1.SelectedRows[0].Cells["UserId"].Value.ToString());
            Maticsoft.Model.Users model = bll.GetModel(id);
            UserAdd userAddForm = new UserAdd(true, model);
            if (userAddForm.ShowDialog() == DialogResult.OK)
            {
                LoadData(); // 添加成功后刷新列表
            }
        }

        private void uiSymbolButton4_Click(object sender, EventArgs e)
        {
            //int id = int.Parse(uiDataGridView1.SelectedRows[0].Cells["UserId"].Value.ToString());
            //if (MessageBox.Show("确定要删除该用户吗？", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            //{
            //    bll.Delete(id);
            //    LoadData(); // 删除后刷新列表
            //}
            // 检查是否有选中的行
            if (uiDataGridView1.SelectedRows.Count == 0)
            {
                MessageBox.Show("请先选择要删除的用户", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            // 显示确认对话框，提示将要删除的数量
            if (MessageBox.Show($"确定要删除选中的 {uiDataGridView1.SelectedRows.Count} 个用户吗？",
                "确认批量删除", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                try
                {
                    // 遍历所有选中的行并删除
                    foreach (DataGridViewRow row in uiDataGridView1.SelectedRows)
                    {
                        int id = int.Parse(row.Cells["UserId"].Value.ToString());
                        bll.Delete(id);
                    }

                    // 刷新数据列表
                    LoadData();
                    MessageBox.Show("批量删除成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"批量删除失败：{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }


    }
}
